#ifndef __NURBS_SIMPLEX__
#define __NURBS_SIMPLEX__

#include "attribute.h"
#include <iostream>

class Simplex {
public:
	Simplex(Attribute& attribute, size_t id) : attribute(&attribute), id(id) {}
	size_t& Id() {return id;}
	const size_t& Id() const {return id;}
	Attribute* GetAttribute() const {return attribute;}
	bool Exist(const std::string& strAttribute) const {return attribute->Exist(strAttribute);}
	template<typename T> T& Get(const std::string& strAttribute) {return attribute->Get<T>(Id(), strAttribute);}
	template<typename T> const T& Get(const std::string& strAttribute) const {return attribute->Get<T>(Id(), strAttribute);}
	template<typename T> T& Get(size_t attributeHandle) {return attribute->Get<T>(Id(), attributeHandle);}
	template<typename T> const T& Get(size_t attributeHandle) const {return attribute->Get<T>(Id(), attributeHandle);}
	void Print() const {std::cout << attribute << std::endl;}
private:
	size_t id;
	Attribute* attribute;
};


#endif //__NURBS_SIMPLEX__

